function sal = simplexCambioBase(N, B, xb, k)
%                  SIMPLEXCAMBIOBASE
% Funcion que regresa los indices de las variables que entran y 
% salen de la base. Los indices corresponden a B(sal).
% 
% usage:    [sal] = simplexCambioBase(N, B, xb, k)
%        donde:
%           sal := Indice de la variable que sale.
%           ent := Indice de la variable que entra.
%             N := Matriz de variables no basicas
%             B := Matriz de variables basicas
%            xb := corresponde al b_barra
%             k := indice de la variable que entra a la base.
% 
%                                   - Marcela Maldonado Figueroa -
%                                     - Pedro Orozco del Pino -
%                                    - Jose Alonso Solis Lemus -
%
fprintf('\n\t Entre a simplexCambioBase. Entra:\t %d', k);
ak = N(:,k);
yk = B\ak;
[m , n] = size(N);
min_bk = eps;
count = 0;

for i=1:length(yk)
    if yk(i) > 0
        aux = xb(i)/yk(i);
        if count == 0
            min_bk = aux;
            count = i;
        else
            if min_bk >= aux
              if min_bk == aux %condicion de ciclado
                % meter i a count sin quitar los demas elementos de count
                count = [count i];
              else
                min_bk = aux;
                count = [];
                count = i; %dejar count con solo el elemento i
              end
            end
        end
    end
end

if min_bk == eps
    % todos fueron negativos, entonces la solucion es no acotada.
    sal = 0;
    return;
end

if length(count) > 1
     sal = simplexCiclado(count, N, B, yk,1) + n;
else
    sal = count + n;
    fprintf('\n\t Sali de simplexCambioBase');
end
